import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { VersioningType } from '@nestjs/common';
import * as session from 'express-session';
import { NestExpressApplication } from '@nestjs/platform-express';
import { join } from 'path';
import {
  // ErrorsInterceptor,
  ResponseInterceptor,
} from './common/ResponseInterceptor';
import { HttpExceptionFilter } from './common/HttpExceptionFilter';
import { RoleGuard } from './guard/role/role.guard';

async function bootstrap() {
  const app = await NestFactory.create<NestExpressApplication>(AppModule);
  app.useStaticAssets(join(__dirname, 'images'), {
    prefix: '/assets',
  }); // 设置静态目录
  // 全局中间件#
  // app.use(logger);
  // 接口版本, 启用uri的方式控制: 例如: /v1/users 代表第一个版本
  app.enableVersioning({
    type: VersioningType.URI,
  });
  /**
   * secret: 用于对 session 数据进行加密的密钥。确保将其保密，以防止数据被篡改。
   * rolling: 表示每次请求时是否重新设置 cookie 的过期时间。设置为 true 时，每次请求都会更新 cookie 的过期时间，保持用户会话的活跃状态。
   * name: 指定存储 session 的 cookie 名称。
   * cookie.maxAge: 设置 cookie 的最大存活时间，这里设置为 30 天（单位为毫秒）。
   */
  app.use(
    session({
      secret: 'hulei',
      rolling: true,
      name: 'hulei.sid',
      cookie: {
        maxAge: 1000 * 60 * 60 * 24 * 30, // 30 days
      },
    }),
  );

  // 注册全局响应拦截器
  app.useGlobalInterceptors(new ResponseInterceptor());
  // 注册全局异常过滤器
  app.useGlobalFilters(new HttpExceptionFilter());
  // app.useGlobalInterceptors(new ErrorsInterceptor());

  // 注册全局守卫
  // app.useGlobalGuards(new RoleGuard());
  await app.listen(3000);
}
bootstrap();
